package com.book.oauth.server.user.service;

import com.book.common.api.entity.CurrentUser;
import com.book.common.lang.Tuple2;
import com.book.common.lang.Tuple4;
import com.book.common.result.RestResponse;
import com.book.oauth.server.route.entity.Route;
import com.book.oauth.server.user.entity.User;
import com.book.modules.core.service.IBaseService;

import java.util.List;

/**
 * Description：用户 Service
 *
 * @Author： leo.xiong
 * @CreateDate： 2020-04-26
 * @Email： leo.xiong@suyun360.com
 * @Version:
 */
public interface IUserService extends IBaseService<User> {
    /**
     * 根据token获取用户信息
     *
     * @param token
     * @return
     */
    RestResponse<CurrentUser> getCurrentUserByToken(String token);

    CurrentUser getCurrentUser(String token);

    /**
     * 修改登录时间，并保存登录日志信息
     *
     * @param userId
     * @param userName
     * @param location
     * @param ip
     * @param browser
     * @param system
     */
    void updateLoginTime(String userId, String userName, String location, String ip, String browser, String system);

    /**
     * 根据Id充值密码
     *
     * @param id
     */
    void resetPassword(Long id);

    /**
     * 修改密码
     *
     * @param id
     * @param oldPassword
     * @param password
     */
    RestResponse updatePassword(Long id, String oldPassword, String password);

    /**
     * 修改头像信息
     *
     * @param id
     * @param avatar
     */
    void updateAvatar(Long id, String avatar);

    /**
     * 修改主题信息
     *
     * @param id
     * @param theme
     */
    void updateTheme(Long id, String theme);

    /**
     * 修改tab信息
     *
     * @param id
     * @param isTab
     */
    void updateTab(Long id, String isTab);

    /**
     * 根据用户信息获取用户公司名称，机构名称，当前角色名称，当前角色所拥有的权限信息
     *
     * @param currentUser
     * @return
     */
    Tuple2<CurrentUser, List<Route>> buildCurrentUserInfo(CurrentUser currentUser);
}
